//#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
//#define BOOST_MPL_LIMIT_VECTOR_SIZE 60
//#include <boost/mpl/integral_c.hpp>
//#include <boost/mpl/vector_c.hpp>
//#include <boost/mpl/at.hpp>
//
//template <typename IndexType, IndexType Index>
//struct same_index
//{
//	static const IndexType value = Index;
//};
//
//template <typename IndexType, IndexType Index>
//struct bit_adjuster_index
//{
//	static const IndexType value = (((( Index / CHAR_BIT )+1)*CHAR_BIT)-1) - (Index % CHAR_BIT);
//};
//
//
//
//template <
//	typename PermutationTable, 
//	template <typename IndexType, IndexType Index> class IndexTraits = same_index
//>
//struct permutator_impl
//{
//	typedef typename PermutationTable::value_type index_type;
//
//	template <index_type Index>
//	static void doit()
//	{
//		//typedef IndexTraits<index_type, Index> index_traits;
//		auto idx = Index;
//
//		const int perm_idx = boost::mpl::at_c<PermutationTable, Index>::type::value;
//
//		auto source_idx = IndexTraits<index_type, perm_idx-1>::value;
//		auto target_idx = IndexTraits<index_type, Index>::value;
//	}
//};
//
//
//
//
//
//
//
//
//using namespace boost::mpl;
//
//typedef vector_c<int
//	, 57, 49, 41, 33, 25, 17,  9
//	,  1, 58, 50, 42, 34, 26, 18
//	, 10,  2, 59, 51, 43, 35, 27
//	, 19, 11,  3, 60, 52, 44, 36
//	, 63, 55, 47, 39, 31, 23, 15
//	,  7, 62, 54, 46, 38, 30, 22
//	, 14,  6, 61, 53, 45, 37, 29
//	, 21, 13,  5, 28, 20, 12,  4 > pc1_table;
//
//
//
//
//int main( /* int argc, char* argv[] */ )
//{
//	//typedef permutator_impl<pc1_table> perm;
//	//perm::doit<15>();
//
//
//	typedef permutator_impl<pc1_table, bit_adjuster_index > perm2;
//	perm2::doit<0>();
//	perm2::doit<1>();
//	perm2::doit<2>();
//	perm2::doit<3>();
//	perm2::doit<4>();
//	perm2::doit<5>();
//	perm2::doit<6>();
//	perm2::doit<7>();
//	perm2::doit<8>();
//	perm2::doit<9>();
//	perm2::doit<10>();
//
//	return 0;
//}
